class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int, int> hash;
        int n = nums.size();

        for(int i = 0; i < n; i++)
        {
            if(hash.count(nums[i]) && abs(hash[nums[i]] - i) <= k)
                return true;
            hash[nums[i]] = i;
        }
        return false;


        // unordered_map<int, vector<int>> hash;
        // int n = nums.size();
        // for(int i = 0; i < n; i++)
        // {
        //     hash[nums[i]].push_back(i);
        //     for(int j = 0; j < hash[nums[i]].size(); j++)
        //     {
        //         if(i != hash[nums[i]][j] && abs(i - hash[nums[i]][j]) <= k)
        //             return true;
        //     }
        // }
        // return false;
    }
};